package com.smile.frame.springbootsatoken.config;

import java.io.Serializable;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author LGC
 * @date 2025/4/25
 */
public class AuthSession implements Serializable {

    private static final long serialVersionUID = -6087933478205489361L;

    /**
     * AuthSession 的 id
     */
    private String id;

    /**
     * AuthSession 的类型
     */
    private String type;

    /**
     * 所属 loginType
     */
    private String loginType;

    /**
     * 所属 loginId （当 AuthSession 属于 Account-Session 时，此值有效）
     */
    private Object loginId;

    /**
     * 所属 Token （当 AuthSession 属于 Token-Session 时，此值有效）
     */
    private String token;

    /**
     * 此 AuthSession 的创建时间（13位时间戳）
     */
    private long createTime;

    /**
     * 所有挂载数据
     */
    private Map<String, Object> dataMap = new ConcurrentHashMap<>();


    public AuthSession() {

    }

    public AuthSession(String id) {
        this.id = id;
        this.createTime = System.currentTimeMillis();
    }

    public String getId() {
        return this.id;
    }


    public AuthSession setId(String id) {
        this.id = id;
        return this;
    }


    public String getType() {
        return this.type;
    }

    public AuthSession setType(String type) {
        this.type = type;
        return this;
    }


    public String getLoginType() {
        return this.loginType;
    }


    public AuthSession setLoginType(String loginType) {
        this.loginType = loginType;
        return this;
    }


    public Object getLoginId() {
        return this.loginId;
    }


    public AuthSession setLoginId(Object loginId) {
        this.loginId = loginId;
        return this;
    }


    public String getToken() {
        return this.token;
    }


    public AuthSession setToken(String token) {
        this.token = token;
        return this;
    }

    public long getCreateTime() {
        return this.createTime;
    }

    public AuthSession setCreateTime(long createTime) {
        this.createTime = createTime;
        return this;
    }


    // 操作

    /**
     * 更新Session
     */
    public void update() {
//        SaManager.getSaTokenDao().updateSession(this);
    }

    /**
     * 注销Session
     */
    public void logout() {
//        SaManager.getSaTokenDao().deleteSession(this.id);
    }


    /**
     * 获取此Session的剩余存活时间 (单位: 秒)
     */
    public long timeout() {
//        return SaManager.getSaTokenDao().getSessionTimeout(this.id);
        return -1;
    }


    // 存取值
    public Object get(String key) {
        return dataMap.get(key);
    }


    public AuthSession set(String key, Object value) {
        dataMap.put(key, value);
//        update();
        return this;
    }

    public AuthSession delete(String key) {
        dataMap.remove(key);
//        update();
        return this;
    }

    // 其它方法

    public Set<String> keys() {
        return dataMap.keySet();
    }

    public void clear() {
        dataMap.clear();
//        update();
    }


    public Map<String, Object> getDataMap() {
        return dataMap;
    }

    public AuthSession setDataMap(Map<String, Object> dataMap) {
        this.dataMap = dataMap;
        return this;
    }


    public AuthSession refreshDataMap(Map<String, Object> dataMap) {
        this.dataMap.clear();
        this.dataMap.putAll(dataMap);
//        this.update();
        return this;
    }


}
